import {
	defineStore
} from 'pinia'
export const useCartStore = defineStore({
	id: 'cart',
	state: () => {
		return {
			cartList: [], //购物车数据
			select: [], //选中的商品ID
			orderList: [] //结算的商品
		}
	},
	getters: {
		isChecked() {
			// 选中的条数==购物车中的总条数
			return this.select.length == this.cartList.length
		},
		// 总价和数量
		total() {
			let total = {
				price: 0,
				number: 0
			}
			// 先把结算商品置空
			this.orderList = []
			this.cartList.forEach(v => {
				// 遍历购物车,如果是选中状态
				if (this.select.indexOf(v.id) != -1) {
					total.price += v.counter * v.discountPrice
					total.number = this.select.length
					// 把商品加入结算
					this.orderList.push({
						number: 1,
						id: v.courseId
					})
				}
			})
			return total
		}
	},
	actions: {
		// 存储购物车数据
		addCart(list) {
			// 先把选择置空
			this.select = []
			// 循环取得每一项数据
			list.forEach(v => {
				// 添加一个'check:true'项
				v['check'] = true
				// 选中每个ID
				this.select.push(v.id)
			})
			this.cartList = list
		},
		// 全选
		all() {
			this.select = this.cartList.map(v => {
				// 把每一条都置为true
				v['check'] = true
				return v.id
			})
		},
		// 全不选
		unall() {
			this.cartList.forEach((v => {
				// 把一个都置为false
				v['check'] = false
			}))
			// 并且把选择置为空
			this.select = []
		},
		// 单选
		itemChecked(index) {
			// 当前点击的课程的ID
			let id = this.cartList[index].id
			// 再去检查在select中有没有存在
			let idx = this.select.indexOf(id)
			if (idx > -1) {
				// 有,就把状态置为false
				this.cartList[index].check = false
				// 再从选中数组中移除
				this.select.splice(idx, 1)
			} else {
				// 没有,就把状态置为true
				this.cartList[index].check = true
				// 再把ID加进选中数组中
				this.select.push(id)
			}
		}
	}
})